// call()方法使用一个指定的this值和单独给出的一个或多个参数来调用一个函数

Function.prototype.call1 = function(context, ...args) {
  // 获取第一个参数（如果第一个参数是null或者undefined，则指向window），构建对象
  context = context ? Object(context) : window
  // 将对应函数传入该对象中
  context.fn = this
  // 获取参数并执行相应函数
  let result = context.fn(...args)
  // 清除副作用
  delete context.fn

  return result
}

function Product(name, price) {
  this.name = name
  this.price = price
}

function Food(name, price) {
  Product.call1(this, name, price)
}

console.log(new Food('cheese', 100).name)